Las ontologías son una forma de representación del conocimiento, cuya importancia es la de ser entendida por el ser humano e interpretada por una máquina.
Por esto, existen lenguajes, formatos, especificaciones, construcciones, etc, que dan un soporte técnico a ontologías y a bases de conocimiento. En otras palabras, los lenguajes permiten concretar, en un documento legible por ordenador, las ideas que puedan estar recogidas en una base de conocimiento.
RDF es una forma de representación del conocimiento que pretende establecer un puente entre el lenguaje humano y el lenguaje de los computadores.
RDF se basa en el análisis de la estructura del lenguaje humano:
Oraciones que se enlazan mediante conjunciones.
Oraciones subordinadas (compuestas por otras oraciones).
Complementos de tiempo, lugar, etc
RDF pretende representar el conocimiento como un conjunto de oraciones simples llamadas tripletas donde:
Oraciones simples:
El sujeto siempre aparece.
No existen complementos.
No existen subordinadas.
Oraciones complejas:
Se descomponen en varias oraciones simples.
Ejemplo:
Oración compleja:
Fernando, el joven de pelo largo y rubio, conoce a Ana, que trabaja en el hospital del centro.
Oraciones simples:
Fernando es un joven.
Fernando tiene el pelo largo.
Fernando tiene el pelo rubio.
Fernando conoce a Ana.
Ana trabaja en el hospital.
El hospital está en el centro.
RDF es un modelo abstracto que requiere de alguna serialización para poder ser escrito y leído, es decir, RDF no es XML, no es JSON; pero RDF se puede escribir como XML y otros formatos.
Un hecho se expresa como una tripleta «sujeto» «verbo» «objeto», también conocida como una sentencia.
Una tripleta es el equivalente a una oración simple.
Sujetos, verbos y objetos son los nombres posibles que pueden recibir los recursos, dependiendo del rol que ocupen en la tripleta.
Para expresar los recursos se utilizan URIs, que son identificadores universales únicos.
También es posible representar los recursos con literales, que son la representación textual del recurso.
Ejemplo:
Tripletas RDF:
«Fernando» «es» «joven»
«Fernando» «conoceA» «Ana»
«Ana» «trabajaEn» «hospital»
«Hospital» «estaEn» «centro»
URIs:
http://example.com/fernando http://example.com/type
http://example.com/joven
http://example.com/fernando http://xmlns.com/foaf/0.1/knows
http://example.com/ana
http://example.com/ana http://example.com/empleadaDe "hospital"
"hospital" http://example.com/ubicadoEn "el centro"
"hospital" y "el centro" son literales.
Una URI es una cadena que identifica a un recurso de una red de forma unívoca. A simple vista puede confundirse con una URL (Uniform Resource Loader) , ya que no hay diferencia en su representación entre unos y otros. Sin embargo, una URL puede hacer referencia a recursos que varían en el tiempo, mientras que las URI hace referencia a recursos fijos.
Podemos utilizar diferentes catálogos de URIs, como por ejemplo:
FOAF (Friend Of A Friend) ➔ http://xmlns.com/foaf/0.1/knows
También podemos mezclar URIs de diferentes proveedores:
example.com & xmlnx.com
Se pueden utilizar literales en vez de URIs para uso a nivel local/interno.
La serialización de RDF a XML es la más utilizada en web semántica y consiste en la traducción de tripletas al lenguaje XML.
xxxxxxxxxx141 2<rdf:RDF xmlns:ex="http://example.com/" xmlns:foaf="http://xmlns.com/foaf/0.1/">3 <rdf:Description rdf:about="http://example.com/fernando">4 <ex:type>joven</ex:type>5 <foaf:knows rdf:resource="http://example.com/ana"/>6 </rdf:Description>7 <rdf:Description rdf:about="http://example.com/ana">8 <ex:empleadaDe>9 <rdf:Description> ///nodo en blanco10 <ex:type rdf:resource=http://example.com/hospital/>11 <ex:ubicadoEn>el centro</ex:ubicadoEn>12 </ex:empleadaDe>13 </rdf:Description>14</rdf:RDF>
En este ejemplo, se introduce un concepto nuevo: el nodo en blanco.
Un nodo en blanco es un recurso sin nombre que se utiliza como puente entre dos sentencias. Así, el hospital en el que trabaja Ana está representado por un nodo anónimo del que sabemos que es un hospital y que está en el centro.
Una representación gráfica de esta idea podría ser:

Otra aproximación es la serialización basada en JSON (JavaScript Object Notation), que es JSON-LD (JSON for Linked Data) compatible con JavaScript.
xxxxxxxxxx91{2 "@context": {3 "ex":"http://example.com/",4 "foaf":" http://xmlns.com/foaf/0.1/"5 },6 "@type": "chico",7 "ex:name": "Fernando",8 "foaf:knows": "http://example.com/Ana9}
La familia de lenguajes Turtle tiene su origen en Notation3 (N3), un sistema de notación que incluye las características de RDF y añade características de LPPO (lógica proposicional de primer orden).
Turtle es un subconjunto de N3 que descarta las características de LPPO y tan solo utiliza las características de RDF.
Turtle es un formato RDF mucho más legible que el equivalente XML.
Ejemplo:
xxxxxxxxxx41 ex: <http://example.com/>2foaf: http://xmlns.com/foaf/0.1/3ex:fernando ex:type "chico";4foaf:knows ex:ana.
De manera genérica, se tiene la siguiente estructura:
xxxxxxxxxx31 myns: <http://example.com/mynamespace/>2myns:object1 myns:type1,myns:type2;3myns:property1 myns:object2., permite indicar varios objetos relacionados con el sujeto-predicado.
; permite asignar varios predicados a un mismo sujeto.
N-Triples es una versión más simplificada de Turtle, que impone un formato en el que cada línea es una sentencia.
Ejemplo:
xxxxxxxxxx21<http://example.com/fernando> <http://example.com/type> "joven"2<http://example.com/fernando> <http://xmlns.com/foaf/0.1/knows> <http://example.com/ana>
RDF Schema es una capa adicional construida sobre RDF para aportar expresividad semántica.
RDFS permite representar jerarquías de clases de recursos, especificando tanto las propiedades como las relaciones entre ellas.
Ejemplo:

xxxxxxxxxx261------------------------------------------Instancias------------------------------------------2<painter about= "munch" name="edvard munch" birth= "1853" death= "1890" nationality= "dutch">3...4</painter>5
6<painting about = "starrynight"...>7 <author resource = "vangogh">8 ...9</painting>10
11--------------------------------------------Clases--------------------------------------------12<Class about = "Painter">13 <subclassOf resource = "Artist"/>14</Class>15
16<Class about = "Painting">17 <subclassOf resource = "Artwork"/>18</Class>19
20<Class about = "Artist"/>21<Class about = "Artwork"/>22
23<Property about = "Author"/>24 <domain resource = "Artwork"/>25 <range resource = "Artist"/>26</Property>
En RDFS, el predicado rdfs:subClassOf indica qué sujeto es una subclase del objeto, mientras que rdf:type indica que el sujeto es una instancia del objeto.
rdf:Class categoría para clasificar recursos.
Ejemplo: Si persona es una clase, podemos definir elementos que son instancias de esa clase: Alejandro es Persona.
rdfs:subClassOf permite establecer jerarquías de clases.
Ejemplo: Gato rdfs:subClassOf Mascota.
rdf:type relación entre la instancia y la clase.
Ejemplo: Alejandro rdf:type Persona.
rdfs:Property relaciona instancias de dos clases.
rdfs:domain se usa para definir cuál es el dominio de una propiedad/relación: posible clase o conjunto de valores que aplican al sujeto.
rdfs:range se usa para definir cuál es el rango de una propiedad/relación: posible clase o conjunto de valores que afectan al objeto.
Ejemplo:
Persona rdf:type rdfs:Class Mascota rdf:type rdfs:Class Gato rdfs:subClassOf Mascota tieneMascota rdf:type rdfs:Property
Alejandro rdf:type Persona Félix rdf:type Gato Alejandro tieneMascota Félix
OWL es una familia de lenguajes para ontologías basada en RDFS, que permite escribir ontologías más ricas en metadatos.
Representa clases, propiedades, individuos y valores de datos para su almacenamiento en documentos de la web semántica.
OWL nos permite generar nueva información a partir de la información que ya tenemos, es decir, inferir conocimiento:
Permite imponer restricciones bidireccionales:
Ejemplo:
Permite representar relaciones encadenadas:
Ejemplo:
Permite representar axiomas (verdades):
Ejemplo: Si la enfermera trabaja en un hospital público debe cumplir turnos de 12 horas.
OWL requiere el cumplimiento de dos supuestos importantes:
Supuesto del mundo abierto:
|
⇩ No saber que una declaración es explícitamente verdadera, no significa que sea falsa ⇩ Verdad||No-verdad ⟷ Verdad||Falso Ante la ausencia de información no se puede decir que algo no sea verdad |
|---|
Sin suposición de nombres únicos:
El mismo concepto se puede representar con varios nombres / URIs diferentes.
OWL permite indicar que nombres / URIs diferentes se refieren a lo mismo, permitiendo así relacionar ontologías.
Esta capacidad de entrelazar datos diferentes se conoce como Linked Data.
Ejemplo:
RDF, RDFS, OWL permiten almacenar y representar información. Sin embargo, de poco sirve disponer de la información si no existe un método para poder acceder rápidamente a la misma.
SPARQL es un lenguaje de búsqueda de información especializado en tripletas RDF.
Tiene una estructura básica de consultas similar al lenguaje SQL, que permite realizar consultas en diversas bases de datos, sin importar cómo fueron almacenados los datos.
Ejemplo:
xxxxxxxxxx101SELECT DISTINCT ?personalLabel (CONCAT("httlps//twitter.com/",?twitterName) AS ?twitterLink) ?pic2WHERE{3 ?person wdt:P2002 ?twitterName;4 wdt:P106 ?ocupation.5 OPTIONAL{?person wdt:P18 ?pic.}6 ?ocupation wdt:P279* wd:Q864503. #todas las subclases de biólogos7 SERVICE wikibase:label {8 bd:serviceParam wikibase:language "en"9 }10}